define(function(require, exports){
	var pubjs	= require('pubjs');
	var view	= require('@base/view');
	var util	= require('util');
	var trigger	= require('modules/trigger');

	var Base = view.container.extend({
		init:function(config){
			config = pubjs.conf(config, {
				'tplFile':	'admin/tpl/map/edit.tpl',
				'view_model': {
					'headTitle': ''
					,'isEdit':false
					,'isSave': false
					,'country': ''
					,'region': ''
					,'city': ''
					,'code': ''
				},
				urlUpdate: 'map/update',
				urlAdd: 'map/add',
				urlInfo: 'map/info'
			});

			this.$id = null;
			this.Super('init', arguments);
		}
		,afterBuild:function(){
			var self = this;

			this.$head = LANG('地图信息');

			var config = {
				// 表单取消按钮
				'cancel': {
					'value': LANG('取消'),
					'class': 'btn btn-link mr20'
				}
				// 表单保存按钮
				,'save': {
					'value': LANG('保存'),
					'class': 'btn btn-confirm'
				}
				,codeTip: {
					'width': 300,
					'data': LANG('格式为 "国家编码_省编码_城市编码" 组成, 如果不存在就是0')
				}
			};

			self.buildFromTemplate(config);
		}
		,load: function(id){
			var self = this;
			self.$id = id;
			if(id){
				self.vm.$.isEdit = true;
				pubjs.loading.show();
				pubjs.mc.send(this.getConfig('urlInfo'), {id: id}, function(err, data){
					pubjs.loading.hide();
					if(err){
						pubjs.alert(err.message);
						return false;
					}
					self.setData(data);
				})
			}

			return self;
		}
		,validate: function(data){
			if(!data.CountryNameCn){
				pubjs.alert(LANG('请输入国家名称'));
				return false;
			}
			if(!data.RegionCode) {
				pubjs.alert(LANG('请输入编码'));
				return false;
			}
			return true;
		}
		,setData: function(data) {
			this.$data = data;
			var self = this
				,vm = self.vm.$;

			vm.country = data.CountryNameCn;
			vm.region = data.RegionNameCn;
			vm.city = data.CityNameCn;
			vm.code = data.RegionCode;
			return self;
		}
		,getData: function(){
			var self = this
				,data
				,vm = self.vm.$;

			data = {
				_id: self.$id
				,CountryNameCn: vm.country
				,RegionNameCn: vm.region
				,CityNameCn: vm.city
				,RegionCode: vm.code
			};

			return data;
		}
		,reset: function(){
			this.$id = 0;
			this.vm.reset();
			return this;
		}
		,save: function() {
			var self = this;
			var data = self.getData();
			var vm = self.vm.$;
			if(self.validate(data)) {
				pubjs.loading.show();
				var url = vm.isEdit ? 'urlUpdate' : 'urlAdd';
				pubjs.mc.send(self.getConfig(url), data, self.afterSave.bind(self))
			}

			return false;
		}
		,afterSave: function(err, data) {
			pubjs.loading.hide();
			if(err) {
				pubjs.alert(err.message);
				return false;
			}

			pubjs.controller.navigate('map/list');
		}
		,onInputClick: function(ev) {
			if(ev.name == 'save') {
				this.save();
			}
			else if(ev.name == 'cancel') {
				pubjs.controller.navigate('map/list');
			}
		}
	});

	exports.base = Base;
});